// 初始化页面的大小处理
$(function(){
    var Selector = {
        header : $('.navbar').outerHeight(),
        footer : $('.footer').outerHeight(),
    }
    $('.page-content').css('min-height', $(window).height() - Selector.header - Selector.footer - 4);
})

/**
 * 初始化jqTreeGrid， 并对基本参数进行赋值。
 * @param domid     加载表格的dom元素
 * @param options   表格初始化时的基本参数配置
 * {
 *     url : 加载表格数据的请求地址
 *     datetype : 默认json格式
 *     mtype    : 默认 post请求
 *     height   : 设置高度
 *     width    : 设置宽度
 *     colNames : [] 表格的列名
 *     colModel : [{
 *        name : 显示列名
 *        index: 字段名称
 *        width: 宽度
 *        formatter : 列中的格式化信息
 *		  hidden: false,	// 这一列是否隐藏
 *		  key : false, 		// 是否是主键，如果设置多个true，使用第一个
 *     }],
 *     treeGrid	: false, 		// 是否是树表
 * 	   treeParent : "parentIdx", // 设置上级
 *     pager    : 分页使用的domid
 *     editurl  : 修改数据用的请求地址
 *     title    : 当前表格的标题,
 *     buttons  : 设置表格的按钮信息
 *     {
 *     		icon  : 图标
 *     		title : 名称
 *     		func  : 方法 带有回掉函数  rows
 *     }
 *
 * }
 */
var JqGrid = function(domid, options){
	options = set(options, new Object());
	options.viewrecords = set(options.viewrecords, true);
	options.rowNum = set(options.rowNum, 20);
	options.rowList = set(options.rowList, [20, 50, 100]);
	options.cellEdit = set(options.cellEdit, false);
	options.multiselect = set(options.multiselect, true);
	options.multiboxonly = set(options.multiboxonly, false);
	options.hidegrid = set(options.hidegrid, false);
	options.autowidth = set(options.autowidth, true);
	options.datatype = set(options.datatype, 'json');
	options.mtype = set(options.mtype, 'POST');
	options.height = set(options.height, $(window).height() - 240);
	options.width = set(options.width, 500);
	options.editurl = set(options.editurl,'');
	options.shrinkToFit = set(options.shrinkToFit, true);
	
	// 树表的配置
	options.treeGrid = set(options.treeGrid, false);
	options.treeParent = set(options.treeParent, "parentid");

	var buttons = set(options.buttons, new Object());
	buttons.add = set(buttons.add, false);
	buttons.edit = set(buttons.edit, false);
	buttons.del = set(buttons.del, false);
	buttons.view = set(buttons.view, false);

    /**
     * 初始化表格的相关数据
     */
    jQuery(domid).jqGrid(
        {
            url         : options.url,
            datatype    : options.datatype,
            mtype       : options.mtype,
            colNames    : options.colNames,
            colModel    : options.colModel,
            viewrecords : options.viewrecords,
            rowNum      : options.rowNum,
            rowList     : options.rowList,
            pager       : options.pager,
            cellEdit    : options.cellEdit,
            editurl     : options.editurl,
            height      : options.height,
            multiselect : options.multiselect,
            multiboxonly: options.multiboxonly,
            caption     : options.title,
            width       : options.width,
            hidegrid    : options.hidegrid,
            autowidth   : options.autowidth,
            shrinkToFit : options.shrinkToFit,
            gridview	: true,
            loadonce	: false,
            treeGrid    : options.treeGrid,
            treeGridModel : "adjacency",
            treeIcons : {
                plus:'fa fa-folder-o',minus:'fa fa-folder-open-o', leaf:'fa fa-circle-o'
            },
            prmNames:{
				"page":"pageNum",
				"rows":"pageSize"
			},
            treeReader : {
                level_field: "level",
                parent_id_field: options.treeParent,
                leaf_field: "isLeaf",
                expanded_field: "expanded"
//                expanded_field : 'false'
            },
            loadComplete: function (xhr) {
                var table = this;
                enableTooltips(table);
                updatePagerIcons(table);
            },
            loadError   : function (xhr, status, error) {
                console.log(error)
            },
        }

    ).jqGrid('navGrid', options.pager,
        {
            edit: typeof buttons.edit == 'function',
            edittext : '修改',
            editicon: 'ace-icon fa fa-pencil blue',
            add: typeof buttons.add == 'function',
            addtext : '新增',
            addicon: 'ace-icon fa fa-plus-circle purple',
            del: typeof buttons.del == 'function',
            deltext : '删除',
            delicon: 'ace-icon fa fa-trash-o red',
            search: false,
            searchicon: 'ace-icon fa fa-search orange',
            refresh: true,
            refreshtext : '刷新',
            refreshicon: 'ace-icon fa fa-refresh green',
            view: typeof buttons.view == 'function',
            viewtext : '查看',
            viewicon: 'ace-icon fa fa-search-plus grey',
            editfunc	: function(rowid){
            	buttons.edit(rowid);
            }, 
            addfunc 	: function(){
            	buttons.add();
            }, 
            delfunc 	: function(rowids){
            	buttons.del(rowids);
            },
            viewfunc 	: function(rowid){
            	buttons.view(rowid);
            }
        }
    );


    /**
     * 表格数据的搜索功能， 传递搜索参数
     * @param data {name : name , value : value}
     */
    this.search = function (data) {
        $(domid).jqGrid('setGridParam',{  // 重新加载数据
            datatype    :'json',
            postData    : data,
            page        : 1
        }).trigger("reloadGrid");
    }
    
    /**
     * 刷新表格页面内的数据内容
     */
    this.reload = function(){
    	$(domid).trigger("reloadGrid");
    }
    
    /**
     * 获取当前表格中被选中的行
     */
    this.getSelectedRows = function(){
    	return $(domid).jqGrid('getGridParam','selarrrow');
    }
    
    /**
     * 获取某行的表格中存在的完整数据
     */
    this.getRowData = function(rowId){
		return $(domid).jqGrid('getRowData', rowId);
	}
    
    /**
     * 重置表格的宽度。 
     */
    this.setWidth = function(width){
    	if(!width){
    		width = $(window.parent.document).find('iframe').width() - 20;
    	}
    	$(domid).jqGrid('setGridWidth', width);
    	var w2 = parseInt($('.ui-jqgrid-labels>th:eq(2)').css('width'))-3;
    	$('.ui-jqgrid-lables>th:eq(2)').css('width',w2);
    	$(domid).find('tr').find("td:eq(2)").each(function(){
    		$(this).css('width',w2);
    	})
    }
    
    /**
     * 重置表格的高度
     */
    this.setHeight = function(height){
    	if(!height){
    		height = $(window).height() - 200;
    	}
    	$(domid).jqGrid('setGridHeight', height);
    }

    /**
     * 分页按钮的功能区域
     * @param table
     */
    function enableTooltips(table) {
        $('.navtable .ui-pg-button').tooltip({container: 'body'});
        $(table).find('.ui-pg-div').tooltip({container: 'body'});
    }

    /**
     * 更新分页的图标信息
     * @param table
     */
    function updatePagerIcons(table) {
        var replacement =
            {
                'ui-icon-seek-first': 'ace-icon fa fa-angle-double-left bigger-140',
                'ui-icon-seek-prev': 'ace-icon fa fa-angle-left bigger-140',
                'ui-icon-seek-next': 'ace-icon fa fa-angle-right bigger-140',
                'ui-icon-seek-end': 'ace-icon fa fa-angle-double-right bigger-140'
            };
        $('.ui-pg-table:not(.navtable) > tbody > tr > .ui-pg-button > .ui-icon').each(function () {
            var icon = $(this);
            var $class = $.trim(icon.attr('class').replace('ui-icon', ''));

            if ($class in replacement) icon.attr('class', 'ui-icon ' + replacement[$class]);
        })
    }
    
    /** 设置某个js的默认值 */
    function set(value, def){
    	return !value ? def : value;
    }
}

